package co.edu.usbcali.hibernate.logica;

import java.util.List;
import co.edu.usbcali.hibernate.persistencia.EntityManagerHelper;
import co.edu.usbcali.hibernate.modelo.Clientes;
import co.edu.usbcali.hibernate.persistencia.DAOFactory;
import co.edu.usbcali.hibernate.persistencia.IClientesDAO;


public class ClienteLogica implements IClienteLogica {
	
	IClientesDAO clientesDAO = DAOFactory.getClienteDAO();

	public void borrarCliente(Long cliCedula, String cliNombre,
			String cliDireccion, String cliTelefono) throws Exception {

		Clientes clientesEntity = null; 
		
		try {
			if (cliCedula == null || cliCedula == 0) {
				throw new Exception("La cedula del cliente es obligatoria");
			}
			if (cliNombre == null || cliNombre.trim().equals("")) {
				throw new Exception("El nombre del cliente es obligatorio");
			}
			if (cliDireccion == null || cliDireccion.trim().equals("")) {
				throw new Exception("La direccion del cliente es obligatoriaS");
			}
			if (cliTelefono == null || cliTelefono.trim().equals("")) {
				throw new Exception("El telefono del cliente es obligatorio");
			}
			EntityManagerHelper.beginTransaction();
			clientesEntity = clientesDAO.findById(cliCedula);
			if (clientesEntity == null) {
				throw new Exception("El cliente no existe");
			}
			
			clientesDAO.delete(clientesEntity);
			EntityManagerHelper.commit();

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}

	}

	public Clientes consultarClientePorId(Long cliCedula) throws Exception {
		Clientes clientesEntity = null; 
		try {
			if (cliCedula == null || cliCedula == 0) {
				throw new Exception("La cedula del cliente es obligatoria");
			}
			EntityManagerHelper.beginTransaction();
			clientesEntity = clientesDAO.findById(cliCedula);
			
			return clientesEntity;

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
		
	}

	public List<Clientes> consultarClientes() throws Exception {
		try {
			EntityManagerHelper.beginTransaction();
			return clientesDAO.findAll();			
		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
		
	}

	public void crearCliente(Long cliCedula, String cliNombre,
			String cliDireccion, String cliTelefono) throws Exception {
		
		Clientes clientesEntity = null; 
		
		try {
			if (cliCedula == null || cliCedula == 0) {
				throw new Exception("La cedula del cliente es obligatoria");
			}
			if (cliNombre == null || cliNombre.trim().equals("")) {
				throw new Exception("El nombre del cliente es obligatorio");
			}
			if (cliDireccion == null || cliDireccion.trim().equals("")) {
				throw new Exception("La direccion del cliente es obligatoria");
			}
			if (cliTelefono == null || cliTelefono.trim().equals("")) {
				throw new Exception("El telefono del cliente es obligatorio");
			}
			EntityManagerHelper.beginTransaction();
			clientesEntity = clientesDAO.findById(cliCedula);
			if (clientesEntity != null) {
				throw new Exception("El cliente ya existe");
			}			
			clientesEntity = new Clientes(cliCedula,cliNombre,cliDireccion,cliTelefono);
			clientesDAO.save(clientesEntity);
			EntityManagerHelper.commit();

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}

	}

	public void modificarCliente(Long cliCedula, String cliNombre,
			String cliDireccion, String cliTelefono) throws Exception {
		Clientes clientesEntity = null; 
		
		try {
			if (cliCedula == null || cliCedula == 0) {
				throw new Exception("La cedula del cliente es obligatoria");
			}
			if (cliNombre == null || cliNombre.trim().equals("")) {
				throw new Exception("El nombre del cliente es obligatorio");
			}
			if (cliDireccion == null || cliDireccion.trim().equals("")) {
				throw new Exception("La direccion del cliente es obligatoriaS");
			}
			if (cliTelefono == null || cliTelefono.trim().equals("")) {
				throw new Exception("El telefono del cliente es obligatorio");
			}
			EntityManagerHelper.beginTransaction();
			clientesEntity = clientesDAO.findById(cliCedula);
			if (clientesEntity == null) {
				throw new Exception("El cliente no existe");
			}
			
			clientesEntity.setCliDireccion(cliDireccion);
			clientesEntity.setCliNombre(cliNombre);
			clientesEntity.setCliTelefono(cliTelefono);
			clientesDAO.update(clientesEntity);
			EntityManagerHelper.commit();

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}

	}

}
